In software-based applications there is frequently the need to uniquely store data within and quickly retrieve data from limited sized data structures or storage locations. Generally, to achieve storage mapping and rapid information retrieval, hashing techniques are implemented. In a basic hashing approach, data is hashed to a key. In some situations, the key provides a direct index value into storage or a data structure for purposes of subsequently locating the original data. Sometimes, there are data collisions meaning that duplicate keys exists for different data, when this occurs inefficiency results because to locate the data, chaining techniques are used or linked lists traversal place.
Hashing is also beneficial in the security arts. For example, typically it is not desirable to store a password of a user; rather, the password is hashed to a key and the key is stored and matched when a user supplies the password. In this manner, the service never actually knows the password of a user but knows how to hash a received password to a key and then match that hashed key to a stored key to validate the user. However, even though the password is not stored the hashed key, which is really an encrypted form of the password, is stored. So, there still exist some security risks with this approach.
Furthermore, some approaches do store the passwords in a password database. When this occurs, the security risks are obvious in that the password can be compromised if the password database is penetrated. This technique also requires a large amount of storage to house the password.
Another shortcoming in the above mentioned password approaches is that the approaches do not have a built-in mechanism to detect corruption in the data. So, if a password of a user becomes corrupted, then the user cannot be authenticated. Message digests may be used for the entire password database or for each password entry in the password database individually, but doing this becomes very inefficient because every time a change occurs the entire database has to be recalculated to generate the message digest. Moreover, the storage required to house the message digest can become impractical in many situations.
Thus, improved and automated techniques are desirable to reduce storage space in processing devices and processing environments and to improve the detection of data corruption in hash-based applications.